package 简单.其他;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 假设 Andy 和 Doris 想在晚餐时选择一家餐厅，并且他们都有一个表示最
 * 喜爱餐厅的列表，每个餐厅的名字用字符串表示。
 * 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案
 * 不止一个，则输出所有答案并且不考虑顺序。 你可以假设答案总是存在。
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/minimum-index-sum-of-two-lists
 */
public class 两个列表的最小索引总和_599 {

    public static void main(String[] args) {

    }

    /**
     * 用Map集合，containsKey判断爱好是否相同
     *
     * @param list1
     * @param list2
     * @return
     */
    public String[] findRestaurant(String[] list1, String[] list2) {
        List<String> list = new ArrayList<>();
        Map<String, Integer> map = new HashMap<>();
        int minIndex = Integer.MAX_VALUE;

        for (int i = 0; i < list1.length; i++) {
            map.put(list1[i], i);
        }
        for (int i = 0; i < list2.length; i++) {
            String str2 = list2[i];
            if (map.containsKey(str2)) {
                int curIndex = map.get(str2) + i;
                if (curIndex < minIndex) {  //索引较小，先清空list
                    list.clear();
                    list.add(str2);
                    minIndex = curIndex;
                } else if (curIndex == minIndex) {  //注意：如果是integer类型比较的是地址值！！！
                    list.add(str2);
                }
            }
        }
        return list.toArray(new String[list.size()]);
    }


}
